ostree_sysroot_get_staged_deployment
ostree_sysroot_init_osname
ostree_sysroot_deployment_set_kargs
+ostree_sysroot_deployment_set_kargs_in_place
ostree_sysroot_deployment_set_mutable
ostree_sysroot_deployment_unlock
ostree_sysroot_deployment_set_pinned
return TRUE;
}
+/**
+ * ostree_sysroot_deployment_set_kargs_in_place:
+ * @self: Sysroot
+ * @deployment: A deployment
+ * @kargs_str: (allow none): Replace @deployment's kernel arguments
+ * @cancellable: Cancellable
+ * @error: Error
+ *
+ * Replace the kernel arguments of @deployment with the values in @kargs_str.
+ */
+gboolean
+ostree_sysroot_deployment_set_kargs_in_place (OstreeSysroot *self,
+ OstreeDeployment *deployment,
+ char *kargs_str,
+ GCancellable *cancellable,
+ GError **error)
+{
+ if (!_ostree_sysroot_ensure_writable (self, error))
+ return FALSE;
+
+ g_assert (!ostree_deployment_is_staged (deployment));
+
+ OstreeBootconfigParser *new_bootconfig = ostree_deployment_get_bootconfig (deployment);
+ ostree_bootconfig_parser_set (new_bootconfig, "options", kargs_str);
+
+ g_autofree char *bootconf_name =
+ g_strdup_printf ("ostree-%d-%s.conf",
+ self->deployments->len - ostree_deployment_get_index (deployment),
+ ostree_deployment_get_osname (deployment));
+
+ g_autofree char *bootconfdir = g_strdup_printf ("loader.%d/entries", self->bootversion);
+ glnx_autofd int bootconf_dfd = -1;
+ if (!glnx_opendirat (self->boot_fd, bootconfdir, TRUE, &bootconf_dfd, error))
+ return FALSE;
+
+ if (!ostree_bootconfig_parser_write_at (new_bootconfig,
+ bootconf_dfd, bootconf_name,
+ cancellable, error))
+ return FALSE;
+
+ return TRUE;
+}
+
/**
* ostree_sysroot_deployment_set_mutable:
* @self: Sysroot
GCancellable *cancellable,
GError **error);
+_OSTREE_PUBLIC
+gboolean ostree_sysroot_deployment_set_kargs_in_place (OstreeSysroot *self,
+ OstreeDeployment *deployment,
+ char *kargs_str,
+ GCancellable *cancellable,
+ GError **error);
+
_OSTREE_PUBLIC
gboolean ostree_sysroot_write_deployments (OstreeSysroot *self,
GPtrArray *new_deployments,
}
}
- g_auto(GStrv) kargs_strv = ostree_kernel_args_to_strv (kargs);
+ g_autofree char *new_options = ostree_kernel_args_to_string (kargs);
- if (!ostree_sysroot_deployment_set_kargs (sysroot, deployment,
- kargs_strv,
- cancellable, error))
+ if (!ostree_sysroot_deployment_set_kargs_in_place (sysroot, deployment, new_options,
+ cancellable, error))
return FALSE;
}